const { app } = require('electron')
const path = require('path')
const fs = require('fs')
const { exec } = require('child_process')

// 配置文件路径
const configPath = path.join(app.getPath('userData'), 'config.json')

// 读取配置
function loadConfig() {
  try {
    if (fs.existsSync(configPath)) {
      const config = JSON.parse(fs.readFileSync(configPath, 'utf8'))
      return config
    }
  } catch (error) {
    console.error('读取配置失败:', error)
  }
  return { autoStart: false, autoConnect: false }
}

// 保存配置
function saveConfig(config) {
  try {
    fs.writeFileSync(configPath, JSON.stringify(config, null, 2))
  } catch (error) {
    console.error('保存配置失败:', error)
  }
}

// 设置开机自启动
function setAutoStart(enable) {
  return new Promise((resolve, reject) => {
    try {
      const config = loadConfig()
      config.autoStart = enable
      saveConfig(config)

      if (process.platform === 'win32') {
        // Windows 系统
        const exePath = process.execPath.replace(/\\/g, '\\\\')
        const appName = app.getName()
        const startupPath = path.join(app.getPath('appData'), 'Microsoft', 'Windows', 'Start Menu', 'Programs', 'Startup')
        const shortcutPath = path.join(startupPath, `${appName}.lnk`)

        if (enable) {
          // 创建快捷方式
          const vbsPath = path.join(app.getPath('temp'), 'create-shortcut.vbs')
          const vbsContent = `
            Set WshShell = WScript.CreateObject("WScript.Shell")
            Set Shortcut = WshShell.CreateShortcut("${shortcutPath}")
            Shortcut.TargetPath = "${exePath}"
            Shortcut.WorkingDirectory = "${path.dirname(exePath).replace(/\\/g, '\\\\')}"
            Shortcut.Arguments = "--autostart"
            Shortcut.WindowStyle = 1
            Shortcut.Description = "DesktopTools"
            Shortcut.Save
          `

          try {
            // 确保启动目录存在
            if (!fs.existsSync(startupPath)) {
              fs.mkdirSync(startupPath, { recursive: true })
            }

            // 写入VBS脚本
            fs.writeFileSync(vbsPath, vbsContent, 'utf8')

            // 执行VBS脚本
            exec(`cscript //nologo "${vbsPath}"`, (error, stdout, stderr) => {
              try {
                // 删除临时VBS文件
                if (fs.existsSync(vbsPath)) {
                  fs.unlinkSync(vbsPath)
                }

                if (error) {
                  console.error('创建快捷方式失败:', error)
                  reject(new Error('创建快捷方式失败: ' + error.message))
                  return
                }

                // 验证快捷方式是否创建成功
                if (fs.existsSync(shortcutPath)) {
                  console.log('开机自启动设置成功')
                  resolve(true)
                } else {
                  reject(new Error('快捷方式创建失败'))
                }
              } catch (err) {
                reject(new Error('处理快捷方式时出错: ' + err.message))
              }
            })
          } catch (err) {
            reject(new Error('创建快捷方式脚本失败: ' + err.message))
          }
        } else {
          // 删除快捷方式
          try {
            if (fs.existsSync(shortcutPath)) {
              fs.unlinkSync(shortcutPath)
              console.log('已删除开机自启动')
            }
            resolve(false)
          } catch (err) {
            reject(new Error('删除快捷方式失败: ' + err.message))
          }
        }
      } else if (process.platform === 'darwin') {
        // macOS 系统
        app.setLoginItemSettings({
          openAtLogin: enable,
          path: process.execPath,
          args: ['--autostart']
        })
        resolve(enable)
      } else {
        // Linux 系统
        const desktopEntryPath = path.join(app.getPath('home'), '.config', 'autostart', `${app.getName()}.desktop`)
        if (enable) {
          const desktopEntry = `[Desktop Entry]
Type=Application
Name=${app.getName()}
Exec="${process.execPath}" --autostart
Hidden=false
NoDisplay=false
X-GNOME-Autostart-enabled=true`
          try {
            const autoStartDir = path.dirname(desktopEntryPath)
            if (!fs.existsSync(autoStartDir)) {
              fs.mkdirSync(autoStartDir, { recursive: true })
            }
            fs.writeFileSync(desktopEntryPath, desktopEntry)
            resolve(true)
          } catch (err) {
            reject(new Error('创建Linux自启动配置失败: ' + err.message))
          }
        } else {
          try {
            if (fs.existsSync(desktopEntryPath)) {
              fs.unlinkSync(desktopEntryPath)
            }
            resolve(false)
          } catch (err) {
            reject(new Error('删除Linux自启动配置失败: ' + err.message))
          }
        }
      }
    } catch (err) {
      reject(new Error('设置开机自启动时出错: ' + err.message))
    }
  })
}

// 设置自启动处理
function setupAutoLaunch() {
  // 检查是否是自启动模式
  const isAutoStart = process.argv.includes('--autostart')
  if (isAutoStart) {
    console.log('应用程序以自启动模式启动')
    // 可以在这里添加自启动模式下的特殊处理
  }
  
  // 可以在这里添加其他自启动相关的初始化代码
}

module.exports = {
  setAutoStart,
  setupAutoLaunch,
  loadConfig,
  saveConfig
}